package com.jvm.getthreadresult;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

// FutureTask 方式 1
public class Demo4 {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        System.out.println(System.currentTimeMillis());
        // 创建一个FutureTask
        FutureTask<Integer> futureTask = new FutureTask<>(() -> {
            TimeUnit.SECONDS.sleep(3);

            return 10;
        });
        // 将 FutureTask 传递一个线程运行
        new Thread(futureTask).start();
        System.out.println(System.currentTimeMillis());
        // futureTask.get()会阻塞当前线程，直到futureTask执行完毕
        Integer result = futureTask.get();
        System.out.println(System.currentTimeMillis() + ":" + result);

        /**
         *
         * 代码中使用FutureTask实现的，
         * FutureTask 实现了Runnable接口，
         * 并且内部带返回值，所以可以传递给 Thread 直接运行，
         * futureTask.get()会阻塞当前线程，
         * 直到FutureTask构造方法传递的任务执行完毕，get 方法才会返回。
         *
         */

    }

}
